/*
Autor: Alexander Savochkin, 2010
New BSD License
*/

#pragma once

#include <string>
#include <boost/date_time/posix_time/posix_time.hpp>

using std::string;
using namespace boost::posix_time;


namespace SRCLF 
{
namespace Control 
{

	/**
	@class IRegulator
	@brief class IRegulator represents abstract regulator.
	@detailed Channel uses regulator to perform control over system.
	*/  
	class IRegulator
	{
	public:
		virtual ~IRegulator() {};

		virtual void setDesired(double dDesired) = 0;	

		virtual void init(double current_input, double current_output, const ptime& current_time) = 0;
		virtual void update(double input_val, const ptime& new_time) = 0;
		virtual double getRegulatorValue() = 0;

		virtual void adminCommand(const string& command, string& result) = 0;
		virtual void controlCommand(const string& command, string& result) = 0;
		virtual void infoCommand(const string& command, string& result) = 0;
	};

} //namespace Control
} //namespace SRCLF
